<?php

namespace exphp;

class PathOperations
{

    /**
     * 获取exphp包路径
     * @author mahaibo <mahaibo@hongbang.js.cn>
     * @return string
     */
    public static function getExPath()
    {
        return dirname(__DIR__) . DIRECTORY_SEPARATOR;
    }

    /**
     * 获取exphp包配置路径
     * @author mahaibo <mahaibo@hongbang.js.cn>
     * @return string
     */
    public static function getExConfigPath()
    {
        return self::getExPath() . 'config' . DIRECTORY_SEPARATOR;
    }

    /**
     * 获取exphp包配置文件路径
     * @author mahaibo <mahaibo@hongbang.js.cn>
     * @return string
     */
    public static function getExConfigFilePath($configFileName = '')
    {
        return self::getExConfigPath() . $configFileName;
    }

    /**
     * 获取项目路径
     * @author mahaibo <mahaibo@hongbang.js.cn>
     * @return string
     */
    public static function getProjectPath($path = '')
    {
        return self::format(dirname($_SERVER['DOCUMENT_ROOT']) . $path);
    }

    private static function format($path)
    {
        return DataTypeConvert::replaceString(['\\' => DIRECTORY_SEPARATOR, '/' => DIRECTORY_SEPARATOR], $path);
    }

    /**
     * 验证路径
     * @author mahaibo <mahaibo@hongbang.js.cn>
     * @param string $path 完整路径
     * @param string $mode 验证模式 ['r' 读取模式,'rc' 读取,不存在则创建,'w' 写入模式, 'wc' 写入,不存在则创建]
     * @return void
     */
    public static function VerifyPath($path, $mode)
    {
        $path = self::format($path);
        if (is_file($path)) {
            $pathArray = DataTypeConvert::convertToArray($path, DIRECTORY_SEPARATOR);
            $file = $pathArray[count($pathArray) - 1];
            unset($pathArray[count($pathArray) - 1]);
            $dir = DataTypeConvert::convertToString($pathArray, DIRECTORY_SEPARATOR);
        } elseif (is_dir($path)) {
            $dir = $path;
            $file = '';
        }
        if (!is_readable($dir)) {
            OutPut::errorMessage('READ_DIR_FAILURE', '没有该目录读取权限');
        }
        if ($mode == 'r' || $mode == 'w') {
            OutPut::errorMessage('WRITE_PATH_NOTEXIST', '没有该路径读取权限或路径不存在');
        } elseif ($mode == 'rc' || $mode == 'wc') {
            if (!is_writable($dir)) {
                OutPut::errorMessage('WRITE_DIR_FAILURE', '没有该目录写入权限');
            }
            if (!is_dir($dir)) {
                mkdir(iconv("UTF-8", "GBK", $dir), 0777, true);
            }
            if (!is_file($dir . DIRECTORY_SEPARATOR . $file)) {
                file_put_contents($dir . DIRECTORY_SEPARATOR . $file, '');
            }
        } else {
            OutPut::errorMessage('SET_MODE_ERROR', '设置参数错误！');
        }
    }
}
